package com.zhiyou100.api.java8_date;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

public class Demo3 {

    public static void main(String[] args) {
        test3();
    }

    public static void test3() {
        LocalDate date = LocalDate.of(2022, 1, 6);
        //通过自定义日期调整方法实现
        date = date.with(new TemporalImpl());
        System.out.println(date);
    }

    //根据指定日期获取下一个工作日是几号    周六周日是休息日
    public static void test2() {
        LocalDate date = LocalDate.of(2022, 1, 7);
        //获取周几
        DayOfWeek dayOfWeek = date.getDayOfWeek();
        int i = dayOfWeek.getValue();
        System.out.println("i = " + i);
        if (i >= 1 && i <= 4) {
            date = date.plusDays(1);
        }
        if (i == 5){
            date = date.plusDays(3);
        }
        System.out.println("date = " + date);
    }


    /**
     * dayOfWeekInMonth  建立一个新的日期,它的值为同一个月中每一周的第几天,
     * firstDayOfMonth  建立一个新的日期,它的值为当月的第一天
     * firstDayOfNextMonth  建立一个新的日期,它的值为下个月的第一天
     * firstDayOfNextYear  建立一个新的日期,它的值为明年的第一天
     * firstDayOfYear  建立一个新的日期,它的值为当年的第一天
     * firstInMonth 建立一个新的日期 它的值同一个月中,第一个符合星期几要求的值
     * lastDayOfMonth  建立一个新的日期,它的值为当月的最后一天
     * lastDayOfNextMonth  建立一个新的日期,它的值为下个月的最后一天
     * lastDayOfNextYear  建立一个新的日期,它的值为明年的最后一天
     * lastDayOfYear  建立一个新的日期,它的值为当年的最后一天
     * lastInMonth 建立一个新的日期 它的值同一个月中,最后一个符合星期几要求的值
     * next/previous 建立一个新的日期 并将其值设定为日期调整后或者调整前,第一个符合指定星期几要求的日期
     * nextOrSame/previousOrSame 建立一个新的日期 并将其值设定为日期调整后或者调整前,第一个符合指定星期几要求的日期 若是该日期符合要求,直接返回改对象
     */
    public static void test() {
        LocalDate localDate = LocalDate.now();
        //建立一个日期为当前日期所在的月份最后一个周日
        localDate = localDate.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));
        System.out.println("localDate = " + localDate);
        //建立一个新的日期,它的值为同一个月中指定周的第几天（周几）
        localDate = localDate.with(TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.SUNDAY));
        System.out.println("localDate = " + localDate);
    }


}
